package day08;

public class Person {
	private String name;
	private int age;
	private char gender;
	private String phone;
	private String email;
	private int status;
	private int role;
	private int state;
	private boolean alive;

	// 在类体中, 没有任何修饰的一对大括号
	// 这样的代码块, 称为 "构造代码块"
	// 当通过new关键字调用构造方法创建对象时
	// 构造代码块会在构造方法之前执行
	// 且, 每次new对象, 都会执行
	// 构造代码块的作用: 当遇到不论以哪种构造方法创建对象时
	// 都必须要执行的操作, 可以在构造代码块中进行
	// 可以保证不论以哪种构造方法创建对象, 操作都能被执行
	// 通常情况, 对对象共性的初始化操作会放在构造代码块中进行
	{
		System.out.println("构造代码块执行");
		// cry();
	}

	// 类体中, 被static关键字修饰的代码块: 静态代码块
	// 注意: 除了static关键字之外, 无任何修饰
	// 静态代码块随着类加载执行
	// 且只执行一次(因为类加载只执行一次)
	// 静态代码块的作用: 对类进行初始化
	static {
		System.out.println("静态代码块");
	}

	// 构造方法之间的互相调用
	public Person() {
		System.out.println("无参构造");
		// cry();
	}

	public Person(String name) {
		System.out.println("一个参数的构造");
		// 通过this关键字调用
		this.name = name;
		// this();
		// Constructor call must be the first statement in a constructor
		// 在一个构造方法中, 调用另一个构造方法的语句
		// 必须是该构造方法的第一行
		// cry();
	}

	public Person(String name, int age) {
		this(name);
		System.out.println("两个参数的构造");
		this.age = age;
		// cry();
	}

	// 赋值操作
	public void setName(String name) { // name
		this.name = name;
	}

	public void setAge(int age) { // age
		if (age < 1 || age > 130) {
			return;
		}
		this.age = age;
	}

	// 取值操作
	public String getName() { // name
		return this.name;
	}

	public int getAge() { // age
		// return this.age;
		return 18;
	}

	public char getGender() {
		return gender;
	}

	public void setGender(char gender) {
		this.gender = gender;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public int getStatus() {
		return status;
	}

	public void setStatus(int status) {
		this.status = status;
	}

	public int getRole() {
		return role;
	}

	public void setRole(int role) {
		this.role = role;
	}

	public int getState() {
		return state;
	}

	public void setState(int state) {
		this.state = state;
	}

	public boolean isAlive() {
		return alive;
	}

	public void setAlive(boolean alive) {
		this.alive = alive;
	}

	public void doSome() {

		int i = 0;
		{
			System.out.println("这是doSome方法中的一个代码段");
		}
		System.out.println(i);

	}

	public void cry() {
		System.out.println("啊~~~");
	}

}
